package sifeap.bl.ejb.eventos;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import sifeap.dal.ejb.eventos.EventoDALLocal;
import sifeap.entities.eventos.Evento;
import sifeap.exception.SifeapException;

/**
 * Session Bean implementation class EventoBL
 */
@Stateless(name="EventoBL")
public class EventoBL implements EventoBLLocal {

	@EJB
	private EventoDALLocal eventoDAL;
	
    /**
     * Default constructor. 
     */
    public EventoBL() {}

	@Override
	public byte crear(Evento evento) throws SifeapException {
		try{
			//Debe validar las fechas
			byte resultado = validarFechas(evento);
			if (resultado != 0) {
				return resultado;
			}
			
			eventoDAL.crear(evento);
			return 1;
		}catch (Exception e) {
			throw new SifeapException(e);
		}
	}

	@Override
	public List<Evento> buscarTodos() throws SifeapException {
		try{
			return eventoDAL.buscarTodos();
		}catch (Exception e) {
			throw new SifeapException(e);
		}
	}

	@Override
	public byte modificar(Evento evento) throws SifeapException {
		try {
			//Debe validar las fechas
			byte resultado = validarFechas(evento);
			if (resultado != 0) {
				return resultado;
			}

			eventoDAL.modificar(evento);
			return 1;
		} catch (Exception e) {
			throw new SifeapException(e);
		}
	}

	@Override
	public boolean eliminar(Evento evento) throws SifeapException {
		try {
			eventoDAL.eliminar(evento);
			return true;
		} catch (Exception e) {
			throw new SifeapException(e);
		}
	}

	@Override
	public Evento buscar(Object id) throws SifeapException {
		try {
			return eventoDAL.buscar(id);
		} catch (Exception e) {
			throw new SifeapException(e);
		}
	}
	
	@Override
	public boolean remover(Evento evento) throws SifeapException {
		try {
			eventoDAL.remover(evento);
			return true;
		} catch (Exception e) {
			throw new SifeapException(e);
		}
	}
	
	@Override
	public List<Evento> buscarEventosVigentes() throws SifeapException {
		try{
			return eventoDAL.buscarEventosVigentes();
		}catch (Exception e) {
			throw new SifeapException(e);
		}
	}
	
	private byte validarFechas(Evento evento) {
		//Valida que la fecha fin sea mayor o igual a la fecha inicio
		if (evento.getFinVigencia().compareTo(evento.getInicioVigencia()) < 0) {
			return 2; //Fechas incorrectas
		}
		
		//Valida que la fecha evento sea mayor o igual a la fecha inicio y menor o igual a la fecha fin
		if (evento.getFechaEvento() != null) {
			if (!(evento.getFechaEvento().compareTo(evento.getInicioVigencia()) >= 0 && evento.getFechaEvento().compareTo(evento.getFinVigencia()) <= 0)) {
				return 3; //Fechas incorrectas
			}
		}
		
		return 0; //Fechas correctas
	}
}
